package findLHS;


import java.util.*;

public class Solution {
    public int findLHS(int[] nums) {
//        Arrays.sort(nums);
//        Map<Integer,Integer>map = new HashMap<>();
//        for (int i = 0; i < nums.length; i++) {
//            if(map.containsKey(nums[i])){
//                map.put(nums[i],map.get(nums[i])+1);
//            }else {
//                map.put(nums[i],1);
//            }
//        }
//        int res = 0;
//        for (int i = 1; i < nums.length; i++) {
//            if(nums[i] - nums[i-1] == 1){
//                res = Math.max(res,map.get(nums[i])+map.get(nums[i-1]));
//            }
//        }
//        return res;

        // 排序
//        int res = 0;
//        Arrays.sort(nums);
//        int lastIndex = 0;
//        int currentIndex = find(0,nums[0],nums)+1;
//        while(currentIndex<nums.length){
//            if(nums[currentIndex] - nums[lastIndex] ==1){
//                currentIndex = find(currentIndex,nums[currentIndex],nums);
//                res = Math.max(currentIndex-lastIndex,res);
//                lastIndex = find(lastIndex,nums[lastIndex],nums)+1;
//                currentIndex = currentIndex+1;
//            }else {
//                lastIndex = currentIndex;
//                currentIndex = find(currentIndex,nums[currentIndex],nums)+1;
//            }
//        }
//        return res;

//        Arrays.sort(nums);
//        Map<Integer,Integer> maxMap = new HashMap<>(); // 每个数字的最大索引
//        Map<Integer,Integer> minMap = new HashMap<>(); // 每个数字的最小索引
//        for (int i = 0; i < nums.length; i++) {
//            maxMap.put(nums[i],i);
//            if(!minMap.containsKey(nums[i])){
//                minMap.put(nums[i],i);
//            }
//        }
//        int res = 0;
//        int lastMax = maxMap.get(nums[0]);
//        int lastMin = minMap.get(nums[0]);
//        int currentMax;
//        int currentMin;
//        for (int i = 1; i < nums.length; i++) {
//            currentMax = maxMap.get(nums[i]);
//            currentMin = minMap.get(nums[i]);
//            if(nums[i] - nums[i-1]==1){
//                res = Math.max(res,currentMax - lastMin);
//            }
//            lastMax = currentMax;
//            lastMin = currentMin;
//        }
//        return res;
        Arrays.sort(nums);
        int res = 0;
        int start = 0;
        int end = 0;
        while (end<nums.length){
            if(nums[end] - nums[start] == 1){
                res = Math.max(res,end-start+1);
            }else{
                start = end;
            }
            end++;
        }
        return res;
    }
    // 返回索引值
//    private int find(int startIndex,int target,int[] nums){
//        int index;
//        for (index = startIndex; index < nums.length; index++) {
//            if(nums[index]!=target){
//                break;
//            }
//        }
//        return index-1;
//    }
}
